package com.mjk.manager.magicapi.conf.provider;

import com.mjk.common.base.error.BeeError;
import com.mjk.common.base.response.BeeResponse;
import com.mjk.common.util.MDCUtils;
import com.mjk.manager.magicapi.core.core.config.JsonCodeConstants;
import com.mjk.manager.magicapi.core.core.context.RequestEntity;
import com.mjk.manager.magicapi.core.core.interceptor.ResultProvider;

import java.util.Map;


/**
 * 自定义JSON结果
 * https://ssssssss.org/magic-api/pages/base/response/
 *
 * @see ResultProvider
 * @see org.ssssssss.magicapi.core.interceptor.DefaultResultProvider
 */
public class CustomJsonValueProvider implements ResultProvider {


    /**
     * 构建请求结果
     *
     * @param requestEntity 请求相关信息
     * @param code          状态码
     * @param message       状态说明
     * @param data          数据内容，可以通过data的类型判断是否是分页结果进行区分普通结果集和分页结果集
     * @return
     */
    @Override
    public Object buildResult(RequestEntity requestEntity, int code, String message, Object data) {
        // 分页结果
        if (data instanceof BeeResponse rsp) {
            rsp.setStatus(code);
            return rsp;
        }
        if (code == JsonCodeConstants.SUCCESS.getCode()) {
            if(data instanceof Map map){
                if(map.containsKey("code") && map.containsKey("msg")){
                    //返回放入traceid
                    map.put("traceId", MDCUtils.getTraceId());
                    return data;
                }
            }
            return BeeError.BEE_SUC.tranceError(data);
        } else {
            BeeResponse rsp = new BeeResponse();
            rsp.setCode(code);
            rsp.setStatus(code);
            rsp.setMsg(message);
            rsp.setData(data);
            return rsp;
        }
    }
}
